home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 676-700 / 681 / term / source.lha / TerminalPanel.c < prev    next >
C/C++ Source or Header  |  1992-05-09  |  20KB  |  694 lines

  1. /*
  2. **    $Id: TerminalPanel.c,v 1.4 92/04/21 17:00:14 olsen Sta Locker: olsen $
  3. **    $Revision: 1.4 $
  4. **    $Date: 92/04/21 17:00:14 $
  5. **
  6. **    Editing panel for terminal configuration
  7. **
  8. **    Copyright © 1990-1992 by Olaf `Olsen' Barthel & MXM
  9. **        All Rights Reserved
  10. */
  11.  
  12. #include "termGlobal.h"
  13.  
  14. enum    {    GAD_FILTER,GAD_DESTRBS,GAD_SWAP,GAD_STRIP,GAD_DISABLE,
  15.         GAD_FASTER,GAD_TITLEBAR,GAD_STATUSLINE,GAD_ANSWERBACK,GAD_CR,GAD_LF,GAD_RECEIVECR,GAD_RECEIVELF,GAD_BELL,
  16.         GAD_SIZE,GAD_COLOUR,GAD_EMULATIONCTRL,GAD_EMUNAME,GAD_NEWEMU,GAD_FONT,GAD_KEYMAP,
  17.         GAD_USE,GAD_CANCEL };
  18.  
  19. #define WIDTH    640
  20. #define HEIGHT    190
  21.  
  22. STATIC STRPTR DisplaySizeType[4] =
  23. {
  24.     NULL,
  25.     NULL,
  26.     NULL,
  27.     NULL
  28. };
  29.  
  30. STATIC STRPTR BellType[6] =
  31. {
  32.     NULL,
  33.     NULL,
  34.     NULL,
  35.     NULL,
  36.     NULL,
  37.     NULL
  38. };
  39.  
  40. STATIC STRPTR CRType[4] =
  41. {
  42.     NULL,
  43.     NULL,
  44.     NULL,
  45.     NULL
  46. };
  47.  
  48. STATIC STRPTR LFType[4] =
  49. {
  50.     NULL,
  51.     NULL,
  52.     NULL,
  53.     NULL
  54. };
  55.  
  56. STATIC STRPTR Emulation[5] =
  57. {
  58.     NULL,
  59.     NULL,
  60.     NULL,
  61.     NULL,
  62.     NULL
  63. };
  64.  
  65. STATIC STRPTR ColourMode[5] =
  66. {
  67.     NULL,
  68.     NULL,
  69.     NULL,
  70.     NULL,
  71.     NULL
  72. };
  73.  
  74. STATIC STRPTR Fonts[3] =
  75. {
  76.     NULL,
  77.     NULL,
  78.     NULL
  79. };
  80.  
  81. STATIC STRPTR StatusLine[4] =
  82. {
  83.     NULL,
  84.     NULL,
  85.     NULL,
  86.     NULL
  87. };
  88.  
  89.     /* Which item to select for current combination of bell modes. */
  90.  
  91. STATIC BYTE BellMode;
  92.  
  93. STATIC struct Gadget *
  94. CreateAllGadgets(struct Configuration *Config,struct Gadget *GadgetArray[],struct Gadget **GadgetList,APTR VisualInfo,UWORD TopEdge)
  95. {
  96.     struct Gadget        *Gadget;
  97.     struct NewGadget     NewGadget;
  98.     UWORD             Counter = 0;
  99.  
  100.     LocalizeString(DisplaySizeType,MSG_TERMINALPANEL_SCREEN_SIZE_TXT,MSG_TERMINALPANEL_80_X_25_TXT);
  101.     LocalizeString(BellType,MSG_TERMINALPANEL_IGNORE_BELL_TXT,MSG_TERMINALPANEL_SYSTEM_DEFAULT_TXT);
  102.     LocalizeString(CRType,MSG_TERMINALPANEL_IGNORE_CR_TXT,MSG_TERMINALPANEL_AS_CR_LF_TXT);
  103.     LocalizeString(LFType,MSG_TERMINALPANEL_IGNORE_LF_TXT,MSG_TERMINALPANEL_AS_LF_CR_TXT);
  104.     LocalizeString(Emulation,MSG_TERMINALPANEL_ANSI_VT102_TXT,MSG_TERMINALPANEL_EXTERNAL_TXT);
  105.     LocalizeString(ColourMode,MSG_TERMINALPANEL_AMIGA_TXT,MSG_TERMINALPANEL_MONO_TXT);
  106.     LocalizeString(Fonts,MSG_TERMINALPANEL_TOPAZ_TXT,MSG_TERMINALPANEL_IBM_PC_STYLE_TXT);
  107.     LocalizeString(StatusLine,MSG_TERMINALPANEL_STATUS_DISABLED_TXT,MSG_TERMINALPANEL_STATUS_COMPACT_TXT);
  108.  
  109.     memset(&NewGadget,0,sizeof(struct NewGadget));
  110.  
  111.     if(Gadget = CreateContext(GadgetList))
  112.     {
  113.         NewGadget . ng_Width        = 26;
  114.         NewGadget . ng_Height        = 12;
  115.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_CAPTURE_FILTER_GAD);
  116.         NewGadget . ng_TextAttr        = &DefaultFont;
  117.         NewGadget . ng_VisualInfo    = VisualInfo;
  118.         NewGadget . ng_GadgetID        = Counter;
  119.         NewGadget . ng_LeftEdge        = (GadToolsLongestString(MSG_TERMINALPANEL_CAPTURE_FILTER_GAD,MSG_TERMINALPANEL_ANSWERBACK_MESSAGE_GAD) + 1) * 8 + 10;
  120.         NewGadget . ng_TopEdge        = 1 + TopEdge;
  121.  
  122.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  123.             GT_Underscore,    '_',
  124.             GTCB_Checked,    Config -> CaptureFilter,
  125.         TAG_DONE);
  126.  
  127.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_DESTRUCTIVE_BS_GAD);
  128.         NewGadget . ng_GadgetID        = Counter;
  129.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  130.  
  131.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  132.             GT_Underscore,    '_',
  133.             GTCB_Checked,    Config -> DestructiveBackspace,
  134.         TAG_DONE);
  135.  
  136.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_SWAP_DEL_BS_GAD);
  137.         NewGadget . ng_GadgetID        = Counter;
  138.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  139.  
  140.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  141.             GT_Underscore,    '_',
  142.             GTCB_Checked,    Config -> SwapBSDelete,
  143.         TAG_DONE);
  144.  
  145.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_STRIP_BIT_8_GAD);
  146.         NewGadget . ng_GadgetID        = Counter;
  147.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  148.  
  149.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  150.             GT_Underscore,    '_',
  151.             GTCB_Checked,    Config -> StripBit8,
  152.         TAG_DONE);
  153.  
  154.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_STOP_BLINKING_GAD);
  155.         NewGadget . ng_GadgetID        = Counter;
  156.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  157.  
  158.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  159.             GT_Underscore,    '_',
  160.             GTCB_Checked,    Config -> DisableBlinking & ~TERMINAL_FASTER,
  161.         TAG_DONE);
  162.  
  163.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_FASTER_LAYOUT_GAD);
  164.         NewGadget . ng_GadgetID        = Counter;
  165.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  166.  
  167.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  168.             GT_Underscore,    '_',
  169.             GTCB_Checked,    Config -> DisableBlinking & TERMINAL_FASTER,
  170.         TAG_DONE);
  171.  
  172.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_SCREEN_TITLE_GAD);
  173.         NewGadget . ng_GadgetID        = Counter;
  174.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  175.  
  176.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  177.             GT_Underscore,    '_',
  178.             GTCB_Checked,    Config -> TitleBar,
  179.         TAG_DONE);
  180.  
  181.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_STATUS_LINE_GAD);
  182.         NewGadget . ng_GadgetID        = Counter;
  183.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  184.         NewGadget . ng_Width        = 164;
  185.  
  186.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  187.             GT_Underscore,    '_',
  188.             GTCY_Labels,    StatusLine,
  189.             GTCY_Active,    Config -> StatusLine,
  190.         TAG_DONE);
  191.  
  192.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_ANSWERBACK_MESSAGE_GAD);
  193.         NewGadget . ng_GadgetID        = Counter;
  194.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  195.         NewGadget . ng_Height        = 14;
  196.  
  197.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  198.             GT_Underscore,    '_',
  199.             GTST_MaxChars,    40,
  200.             GTST_String,    Config -> AnswerBack,
  201.             GTST_EditHook,    &CommandHook,
  202.             GA_Immediate,    TRUE,
  203.         TAG_DONE);
  204.  
  205.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_SEND_CR_GAD);
  206.         NewGadget . ng_GadgetID        = Counter;
  207.         NewGadget . ng_TopEdge        = 1 + TopEdge;
  208.         NewGadget . ng_Width        = 164;
  209.         NewGadget . ng_Height        = 12;
  210.         NewGadget . ng_LeftEdge        = WIDTH - 10 - NewGadget . ng_Width;
  211.  
  212.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  213.             GT_Underscore,    '_',
  214.             GTCY_Labels,    CRType,
  215.             GTCY_Active,    Config -> SendCR,
  216.         TAG_DONE);
  217.  
  218.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_SEND_LF_GAD);
  219.         NewGadget . ng_GadgetID        = Counter;
  220.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  221.  
  222.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  223.             GT_Underscore,    '_',
  224.             GTCY_Labels,    LFType,
  225.             GTCY_Active,    Config -> SendLF,
  226.         TAG_DONE);
  227.  
  228.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_RECEIVE_CR_GAD);
  229.         NewGadget . ng_GadgetID        = Counter;
  230.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  231.         NewGadget . ng_Width        = 164;
  232.  
  233.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  234.             GT_Underscore,    '_',
  235.             GTCY_Labels,    CRType,
  236.             GTCY_Active,    Config -> ReceiveCR,
  237.         TAG_DONE);
  238.  
  239.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_RECEIVE_LF_GAD);
  240.         NewGadget . ng_GadgetID        = Counter;
  241.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  242.  
  243.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  244.             GT_Underscore,    '_',
  245.             GTCY_Labels,    LFType,
  246.             GTCY_Active,    Config -> ReceiveLF,
  247.         TAG_DONE);
  248.  
  249.         if(Config -> SystemBeep)
  250.             BellMode = 4;
  251.         else
  252.         {
  253.             if(Config -> AudibleBell)
  254.             {
  255.                 if(Config -> VisibleBell)
  256.                     BellMode = 3;
  257.                 else
  258.                     BellMode = 2;
  259.             }
  260.             else
  261.             {
  262.                 if(Config -> VisibleBell)
  263.                     BellMode = 1;
  264.                 else
  265.                     BellMode = 0;
  266.             }
  267.         }
  268.  
  269.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_BELL_GAD);
  270.         NewGadget . ng_GadgetID        = Counter;
  271.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  272.  
  273.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  274.             GT_Underscore,    '_',
  275.             GTCY_Labels,    BellType,
  276.             GTCY_Active,    BellMode,
  277.         TAG_DONE);
  278.  
  279.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_DISPLAY_SIZE_GAD);
  280.         NewGadget . ng_GadgetID        = Counter;
  281.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  282.  
  283.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  284.             GT_Underscore,    '_',
  285.             GTCY_Labels,    DisplaySizeType,
  286.             GTCY_Active,    Config -> EightyColumns,
  287.             GA_Disabled,    (Window -> Height >> 3) < 25,
  288.         TAG_DONE);
  289.  
  290.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_COLOUR_GAD);
  291.         NewGadget . ng_GadgetID        = Counter;
  292.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  293.  
  294.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  295.             GT_Underscore,    '_',
  296.             GTCY_Labels,    ColourMode,
  297.             GTCY_Active,    Config -> ColourMode,
  298.         TAG_DONE);
  299.  
  300.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_EMULATION_GAD);
  301.         NewGadget . ng_GadgetID        = Counter;
  302.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  303.  
  304.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  305.             GT_Underscore,    '_',
  306.             GTCY_Labels,    Emulation,
  307.             GTCY_Active,    Config -> Emulation,
  308.         TAG_DONE);
  309.  
  310.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_EMU__NAME_GAD);
  311.         NewGadget . ng_GadgetID        = Counter;
  312.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  313.         NewGadget . ng_Height        = 14;
  314.  
  315.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  316.             GT_Underscore,    '_',
  317.             GTST_MaxChars,    255,
  318.             GTST_String,    Config -> EmulationName,
  319.             GA_Disabled,    Config -> Emulation != EMULATION_EXTERNAL,
  320.             GTST_EditHook,    &CommandHook,
  321.             GA_Immediate,    TRUE,
  322.         TAG_DONE);
  323.  
  324.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_SELECT_NEW_EMULATION_GAD);
  325.         NewGadget . ng_GadgetID        = Counter;
  326.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  327.         NewGadget . ng_Height        = 12;
  328.  
  329.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  330.             GT_Underscore,    '_',
  331.             GA_Disabled,    Config -> Emulation != EMULATION_EXTERNAL,
  332.         TAG_DONE);
  333.  
  334.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_FONT_GAD);
  335.         NewGadget . ng_GadgetID        = Counter;
  336.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  337.  
  338.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  339.             GT_Underscore,    '_',
  340.             GTCY_Labels,    Fonts,
  341.             GTCY_Active,    Config -> Font,
  342.             GA_Disabled,    (!IBM || Config -> Emulation == EMULATION_EXTERNAL),
  343.         TAG_DONE);
  344.  
  345.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_KEYMAP_NAME_GAD);
  346.         NewGadget . ng_GadgetID        = Counter;
  347.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  348.         NewGadget . ng_Height        = 14;
  349.  
  350.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  351.             GT_Underscore,    '_',
  352.             GTST_MaxChars,    39,
  353.             GTST_String,    Config -> KeyMapName,
  354.             GTST_EditHook,    &CommandHook,
  355.             GA_Immediate,    TRUE,
  356.         TAG_DONE);
  357.  
  358.         NewGadget . ng_Width        = 88;    /* NEW 52 */
  359.         NewGadget . ng_Height        = 12;
  360.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_USE_GAD);
  361.         NewGadget . ng_GadgetID        = Counter;
  362.         NewGadget . ng_Flags        = 0;
  363.         NewGadget . ng_LeftEdge        = 10;
  364.         NewGadget . ng_TopEdge        = HEIGHT - 3 - NewGadget . ng_Height;
  365.  
  366.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  367.             GT_Underscore,    '_',
  368.         TAG_DONE);
  369.  
  370.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_CANCEL_GAD);
  371.         NewGadget . ng_GadgetID        = Counter;
  372.         NewGadget . ng_LeftEdge        = WIDTH - 10 - NewGadget . ng_Width;
  373.  
  374.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  375.             GT_Underscore,    '_',
  376.         TAG_DONE);
  377.     }
  378.  
  379.     return(Gadget);
  380. }
  381.  
  382.     /* SelectEmulator(UBYTE *Name,struct Window *ParentWindow):
  383.      *
  384.      *    Select a new emulator driver using the
  385.      *    asl.library file requester.
  386.      */
  387.  
  388. STATIC BYTE
  389. SelectEmulator(UBYTE *Name,struct Window *ParentWindow)
  390. {
  391.     struct FileRequester    *AslFileRequest;
  392.     UBYTE            *File,*Temp;
  393.     BYTE             NewDriver = FALSE;
  394.  
  395.     File = Name;
  396.  
  397.     strcpy(SharedBuffer,File);
  398.  
  399.     Temp = PathPart(SharedBuffer);
  400.  
  401.     Temp[0] = 0;
  402.  
  403.     if(!SharedBuffer[0])
  404.         strcpy(SharedBuffer,"Libs:");
  405.  
  406.     File = FilePart(File);
  407.  
  408.     if(AslFileRequest = (struct FileRequester *)AllocAslRequestTags(ASL_FileRequest,
  409.         ASL_Window,    ParentWindow,
  410.         ASL_File,    File,
  411.         ASL_Dir,    SharedBuffer,
  412.         ASL_Hail,    LocaleString(MSG_TERMINALPANEL_SELECT_EMULATOR_TXT),
  413.         ASL_FuncFlags,    FILF_NEWIDCMP,
  414.         ASL_Pattern,    "XEm#?.library",
  415.         ASL_OKText,    LocaleString(MSG_GLOBAL_SELECT_TXT),
  416.     TAG_END))
  417.     {
  418.         if(AslRequestTags(AslFileRequest,TAG_DONE))
  419.         {
  420.             if(AslFileRequest -> rf_File[0])
  421.             {
  422.                 if(Stricmp(AslFileRequest -> rf_Dir,"Libs:"))
  423.                     strcpy(SharedBuffer,AslFileRequest -> rf_Dir);
  424.                 else
  425.                     SharedBuffer[0] = 0;
  426.  
  427.                 if(!AddPart(SharedBuffer,AslFileRequest -> rf_File,256))
  428.                     strcpy(SharedBuffer,AslFileRequest -> rf_File);
  429.  
  430.                 if(Stricmp(SharedBuffer,Name))
  431.                 {
  432.                     strcpy(Name,SharedBuffer);
  433.  
  434.                     NewDriver = TRUE;
  435.                 }
  436.             }
  437.         }
  438.  
  439.         FreeAslRequest(AslFileRequest);
  440.     }
  441.  
  442.     return(NewDriver);
  443. }
  444.  
  445. VOID
  446. TerminalPanel(struct Configuration *Config)
  447. {
  448.     struct Window    *PanelWindow;
  449.     struct Gadget    *GadgetList = NULL;
  450.     struct Gadget    *GadgetArray[GAD_CANCEL + 1];
  451.     UBYTE         DummyBuffer[256];
  452.  
  453.     CopyMem(Config,&PrivateConfig,sizeof(struct Configuration));
  454.  
  455.     if(CreateAllGadgets(Config,&GadgetArray[0],&GadgetList,VisualInfo,Screen -> WBorTop + Screen -> Font -> ta_YSize + 1))
  456.     {
  457.         if(PanelWindow = OpenWindowTags(NULL,
  458.             WA_Left,    (Screen -> Width - WIDTH) >> 1,
  459.             WA_Top,        (Screen -> Height - HEIGHT) >> 1,
  460.             WA_Width,    WIDTH,
  461.             WA_Height,    HEIGHT,
  462.  
  463.             WA_Activate,    TRUE,
  464.             WA_DragBar,    TRUE,
  465.             WA_DepthGadget,    TRUE,
  466.             WA_RMBTrap,    TRUE,
  467.             WA_DepthGadget,    TRUE,
  468.             WA_CloseGadget,    TRUE,
  469.             WA_CustomScreen,Screen,
  470.  
  471.             WA_IDCMP,    IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY | IDCMP_GADGETDOWN | BUTTONIDCMP | CHECKBOXIDCMP | CYCLEIDCMP | STRINGIDCMP,
  472.  
  473.             WA_Title,    LocaleString(MSG_TERMINALPANEL_TERMINAL_PREFERENCES_TXT),
  474.         TAG_DONE))
  475.         {
  476.             struct IntuiMessage    *Massage;
  477.             ULONG             Class,Code;
  478.             struct Gadget        *Gadget;
  479.             BYTE             Terminated = FALSE,
  480.                          TheLine = Config -> StatusLine;
  481.  
  482.             PushWindow(PanelWindow);
  483.  
  484.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  485.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  486.             GT_RefreshWindow(PanelWindow,NULL);
  487.  
  488.             ActiveGadget = NULL;
  489.  
  490.             while(!Terminated)
  491.             {
  492.                 WaitPort(PanelWindow -> UserPort);
  493.  
  494.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  495.                 {
  496.                     Class    = Massage -> Class;
  497.                     Code    = Massage -> Code;
  498.                     Gadget    = (struct Gadget *)Massage -> IAddress;
  499.  
  500.                     GT_ReplyIMsg(Massage);
  501.  
  502.                     if(Class == IDCMP_VANILLAKEY)
  503.                         KeySelect(GadgetArray,GAD_CANCEL,Code,PanelWindow,&Gadget,&Class,&Code);
  504.  
  505.                     if(Class == IDCMP_GADGETDOWN)
  506.                     {
  507.                         if((Gadget -> GadgetType & GTYP_GTYPEMASK) == GTYP_STRGADGET)
  508.                             ActiveGadget = Gadget;
  509.                     }
  510.  
  511.                     if(Class == IDCMP_ACTIVEWINDOW && ActiveGadget)
  512.                         ActivateGadget(ActiveGadget,PanelWindow,NULL);
  513.  
  514.                     if(Class == IDCMP_CLOSEWINDOW)
  515.                         Terminated = TRUE;
  516.  
  517. GadCheck:                if(Class == IDCMP_GADGETUP && !GT_DISABLED(Gadget))
  518.                     {
  519.                         switch(Gadget -> GadgetID)
  520.                         {
  521.                             case GAD_CR:        Config -> SendCR = Code;
  522.                                         break;
  523.  
  524.                             case GAD_LF:        Config -> SendLF = Code;
  525.                                         break;
  526.  
  527.                             case GAD_RECEIVECR:    Config -> ReceiveCR = Code;
  528.                                         break;
  529.  
  530.                             case GAD_RECEIVELF:    Config -> ReceiveLF = Code;
  531.                                         break;
  532.  
  533.                             case GAD_BELL:        BellMode = Code;
  534.  
  535.                                         switch(BellMode)
  536.                                         {
  537.                                             case 0:    Config -> VisibleBell    = FALSE;
  538.                                                 Config -> AudibleBell    = FALSE;
  539.                                                 Config -> SystemBeep    = FALSE;
  540.                                                 break;
  541.  
  542.                                             case 1:    Config -> VisibleBell    = TRUE;
  543.                                                 Config -> AudibleBell    = FALSE;
  544.                                                 Config -> SystemBeep    = FALSE;
  545.                                                 break;
  546.  
  547.                                             case 2:    Config -> VisibleBell    = FALSE;
  548.                                                 Config -> AudibleBell    = TRUE;
  549.                                                 Config -> SystemBeep    = FALSE;
  550.                                                 break;
  551.  
  552.                                             case 3:    Config -> VisibleBell    = TRUE;
  553.                                                 Config -> AudibleBell    = TRUE;
  554.                                                 Config -> SystemBeep    = FALSE;
  555.                                                 break;
  556.  
  557.                                             case 4:    Config -> VisibleBell    = FALSE;
  558.                                                 Config -> AudibleBell    = FALSE;
  559.                                                 Config -> SystemBeep    = TRUE;
  560.                                                 break;
  561.                                         }
  562.  
  563.                                         break;
  564.  
  565.                             case GAD_SIZE:        Config -> EightyColumns = Code;
  566.                                         break;
  567.  
  568.                             case GAD_COLOUR:    if(Code && !ModeOkay(Config -> DisplayMode))
  569.                                         {
  570.                                             Code = COLOUR_MONO;
  571.  
  572.                                             GT_SetGadgetAttrs(GadgetArray[GAD_COLOUR],PanelWindow,NULL,
  573.                                                 GTCY_Active,    Code,
  574.                                             TAG_DONE);
  575.                                         }
  576.  
  577.                                         Config -> ColourMode = Code;
  578.  
  579.                                         break;
  580.  
  581.                             case GAD_EMULATIONCTRL:    Config -> Emulation = Code;
  582.  
  583.                                         if(Code == EMULATION_ATOMIC && Config -> ColourMode != COLOUR_AMIGA && Config -> ColourMode != COLOUR_MONO)
  584.                                         {
  585.                                             GT_SetGadgetAttrs(GadgetArray[GAD_COLOUR],PanelWindow,NULL,
  586.                                                 GTCY_Active,COLOUR_MONO,
  587.                                             TAG_DONE);
  588.  
  589.                                             Config -> ColourMode = COLOUR_MONO;
  590.                                         }
  591.  
  592.                                         GT_SetGadgetAttrs(GadgetArray[GAD_EMUNAME],PanelWindow,NULL,
  593.                                             GA_Disabled,    Config -> Emulation != EMULATION_EXTERNAL,
  594.                                         TAG_DONE);
  595.  
  596.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NEWEMU],PanelWindow,NULL,
  597.                                             GA_Disabled,    Config -> Emulation != EMULATION_EXTERNAL,
  598.                                         TAG_DONE);
  599.  
  600.                                         if((Window -> Height >> 3) > 24)
  601.                                         {
  602.                                             GT_SetGadgetAttrs(GadgetArray[GAD_SIZE],PanelWindow,NULL,
  603.                                                 GA_Disabled,    Config -> Emulation == EMULATION_EXTERNAL,
  604.                                             TAG_DONE);
  605.                                         }
  606.  
  607.                                         if(IBM)
  608.                                         {
  609.                                             GT_SetGadgetAttrs(GadgetArray[GAD_FONT],PanelWindow,NULL,
  610.                                                 GA_Disabled,    Config -> Emulation == EMULATION_EXTERNAL,
  611.                                             TAG_DONE);
  612.                                         }
  613.  
  614.                                         break;
  615.  
  616.                             case GAD_FONT:        Config -> Font = Code;
  617.                                         break;
  618.  
  619.                             case GAD_STATUSLINE:    TheLine = Code;
  620.                                         break;
  621.  
  622.                             case GAD_USE:        Terminated = TRUE;
  623.  
  624.                                         Config -> CaptureFilter        = GT_CHECKED(GadgetArray[GAD_FILTER]);
  625.                                         Config -> DestructiveBackspace    = GT_CHECKED(GadgetArray[GAD_DESTRBS]);
  626.                                         Config -> SwapBSDelete        = GT_CHECKED(GadgetArray[GAD_SWAP]);
  627.                                         Config -> StripBit8        = GT_CHECKED(GadgetArray[GAD_STRIP]);
  628.                                         Config -> DisableBlinking    = GT_CHECKED(GadgetArray[GAD_DISABLE]);
  629.                                         Config -> TitleBar        = GT_CHECKED(GadgetArray[GAD_TITLEBAR]);
  630.  
  631.                                         if(GT_CHECKED(GadgetArray[GAD_FASTER]))
  632.                                             Config -> DisableBlinking |= TERMINAL_FASTER;
  633.  
  634.                                         strcpy(Config -> EmulationName,    GT_STRING(GadgetArray[GAD_EMUNAME]));
  635.                                         strcpy(Config -> KeyMapName,    GT_STRING(GadgetArray[GAD_KEYMAP]));
  636.                                         strcpy(Config -> AnswerBack,    GT_STRING(GadgetArray[GAD_ANSWERBACK]));
  637.  
  638.                                         Config -> StatusLine = TheLine;
  639.  
  640.                                         switch(Config -> ColourMode)
  641.                                         {
  642.                                             case COLOUR_EIGHT:    CopyMem(&ANSIColours[0],&Config -> Colours[0],16 * sizeof(UWORD));
  643.                                                         break;
  644.  
  645.                                             case COLOUR_SIXTEEN:    CopyMem(&EGAColours[0],&Config -> Colours[0],16 * sizeof(UWORD));
  646.                                                         break;
  647.  
  648.                                             case COLOUR_AMIGA:    CopyMem(&DefaultColours[0],&Config -> Colours[0],16 * sizeof(UWORD));
  649.                                                         break;
  650.  
  651.                                             case COLOUR_MONO:        CopyMem(&AtomicColours[0],&Config -> Colours[0],16 * sizeof(UWORD));
  652.                                                         break;
  653.                                         }
  654.  
  655.                                         break;
  656.  
  657.                             case GAD_NEWEMU:    strcpy(DummyBuffer,GT_STRING(GadgetArray[GAD_EMUNAME]));
  658.  
  659.                                         BlockWindow(PanelWindow);
  660.  
  661.                                         if(SelectEmulator(DummyBuffer,PanelWindow))
  662.                                         {
  663.                                             GT_SetGadgetAttrs(GadgetArray[GAD_EMUNAME],PanelWindow,NULL,
  664.                                                 GTST_String,DummyBuffer,
  665.                                             TAG_DONE);
  666.                                         }
  667.  
  668.                                         ReleaseWindow(PanelWindow);
  669.  
  670.                                         break;
  671.  
  672.                             case GAD_CANCEL:    Terminated = TRUE;
  673.  
  674.                                         CopyMem(&PrivateConfig,Config,sizeof(struct Configuration));
  675.  
  676.                                         break;
  677.  
  678.                             default:        break;
  679.                         }
  680.                     }
  681.                 }
  682.             }
  683.  
  684.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  685.  
  686.             PopWindow();
  687.  
  688.             CloseWindow(PanelWindow);
  689.         }
  690.     }
  691.  
  692.     FreeGadgets(GadgetList);
  693. }
  694.